#ifndef __VCD_UTIL_H__
#define __VCD_UTIL_H__

#include <glib.h>
#include <gtk/gtk.h>

G_BEGIN_DECLS

#ifndef PUBLIC_LOGIN
#define PUBLIC_LOGIN 0
#endif

#ifndef PRIVATE_LOGIN
#define PRIVATE_LOGIN 1
#endif

#ifndef EMODE_OLD
#define EMODE_OLD 1
#endif

#ifndef EMODE_NEW
#define EMODE_NEW 0
#endif


#ifndef SAFE_FREE
#define SAFE_FREE(x) if((x)){free((x));(x) = NULL;}
#endif

#ifndef G_SAFE_FREE
#define G_SAFE_FREE(x) if((x)){g_free((x));(x) = NULL;}
#endif

#ifndef ENGLISH
#define ENGLISH 1
#endif

enum config_type {
    OSTYPE = 1,
    NET0,
    GETARGS,
    SETARGS
};

typedef enum heartbeat_type {
    CONN_HEARTBEAT = 1,
    LOCALMODE_HEARTBEAT
}HeartbeatType;

typedef enum protocol_type{
    PROTOCOL_UNKNOW,
    PROTOCOL_SPICE,
    PROTOCOL_RDP,
    PROTOCOL_STREAM
}ProtoType;

typedef enum topbar_position{
    POSITION_TOP,
    POSITION_LEFT,
    POSITION_RIGHT
}TopbarPostion;

typedef struct localmode_user_pass {
    char username[100];
    char password[100];
}LocalmodeUserPass;

typedef struct vm_info
{
    gint vmid;
    gint Template;
    char node[60];
    char status[30];
    char name[60];
    char type[30];
    char public_ostype[10];
    char public_id[20];
    char server_ip[40];
    char system_type[10];
    char net0[50];
    char guest_ip[40];
} vm_info;

typedef struct{
    int success;
    gchar* fail_msg;
    gchar *host;
    gchar *title;
    int tls_port;
    gchar *type;
    gchar *proxy;
    gchar *password;
}spice_proxy_data;

typedef struct vm_config_response{
    char *name;
    char *args;
    char *net0;
    char *ostype;
}vm_config_response;

typedef struct disconnect_res{
    int pre_link;
    int max_connection;
    int connected_num;
}disconnect_res;

typedef struct ticket_param{
    gchar *token;
    gchar *ticket;
}ticket_param;

typedef struct{

    int success;
    char host[150];
    char port[50];
    char password[50];
    char proxy[100];
    char title[50];
    char fail_msg[100];

    gboolean use_rdp;
    char protocol[10];
    char rdp_host[50];
    char rdp_port[50];
    char *rdp_stream_path;
    char *streamExtend;

    gboolean use_guest_user_pass;
    char guest_name[50];
    char guest_pass[50];

    char *log4crc_path;
    char *log_dir;

    char *install_path;
    char *theme_path;

    int vmid;
    char vmnode[50];
    char vmname[100];
    char username[100];
    char api_port[8];//网关心跳的端口
    char instance_id[50];
    gint64 expires_in;

    /*
       前端设置缩放倍数
    */
    char* extra_scale;

    /* 串流时生效
     * 是否使用硬件加速
     */
    gboolean gdi;

    /* 串流是生效
     * 是否开启声音
     */
    gboolean use_audio;

    /* 是否开启usb重定向
     * spice的重定向
     */
    gboolean use_usb_redir;

    /* 是否映射本地磁盘
     * 串流时使用
     */
    gboolean use_local_disk_redirect;

    /***
     * 是否开启log日志
     * true:开启 false:关闭  default:false
     */
    gboolean use_log;

    /***
     * 向ats代理服务器发送的字符串
     * 通过 /ats-auth:xxxxx  传给 verystream
     * type: char*   default: NULL
     **/
     char *gw;

     /***
      * 连接串流时设置的图像质量
      * 1:  无损
      * 2:  高
      * 3:  中
      * 4:  低
      **/
     int image_quality;

     /***
      * 连接类型
      *
      **/
     ProtoType protocol_type;

}spice_connect_data;

typedef struct vcd_api_login_data{
    gint64   code;
    char* fail_msg;
    char* token;
    char* refresh_token;
    char* user_data;
}vcd_api_login_data;

typedef struct vcd_api_vclient_data{
    gint64   code;
    char* fail_msg;
    char* data;
}vcd_api_vclient_data;

G_END_DECLS
#endif
